<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.9.0">
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  
  <title>Text-to-Viz：根据语言描述自动创建信息图表 | Rogerspy&#39;s Home</title>
  
  <meta name="keywords" content="Machine Learning, Deep Learning, NLP">
  
  

  
  <link rel="alternate" href="/atom.xml" title="Rogerspy's Home">
  

  <meta name="HandheldFriendly" content="True">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <!-- meta -->
  
  
  <meta name="theme-color" content="#FFFFFF">
  <meta name="msapplication-TileColor" content="#1BC3FB">
  <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/browserconfig.xml">
  

  <!-- link -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css">
  
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.css">
  
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.10.1/css/all.min.css">
  
  
  <link rel="shortcut icon" type="image/x-icon" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.ico">
  <link rel="icon" type="image/x-icon" sizes="32x32" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/favicon-32x32.png">
  <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/apple-touch-icon.png">
  <link rel="mask-icon" color="#1BC3FB" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/safari-pinned-tab.svg">
  <link rel="manifest" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/site.webmanifest">
  

  

  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-material-x@19.5/css/style.css">
  

  <script>
    function setLoadingBarProgress(num) {
      document.getElementById('loading-bar').style.width=num+"%";
    }
  </script>
  

  
  
  <!-- 时间线 -->
  <link rel="stylesheet" href="/css/timeline.css">
  <!-- 血小板-->
  <link rel="stylesheet" href="/live2d/css/live2d.css">
  <style>
	.article p .mjx-math {
	    font-family: Menlo,Monaco,courier,monospace,"Lucida Console",'Source Code Pro',"Microsoft YaHei",Helvetica,Arial,sans-serif,Ubuntu;
        background: none;
        padding: 2px;
        border-radius: 4px;
	}
  </style>
</head>

<body>
  
  
  <header class="l_header pure">
  <div id="loading-bar-wrapper">
    <div id="loading-bar" class="pure"></div>
  </div>

	<div class='wrapper'>
		<div class="nav-main container container--flex">
      <a class="logo flat-box" href='/' >
        
          Rogerspy's Home
        
      </a>
			<div class='menu navgation'>
				<ul class='h-list'>
          
  					
  						<li>
								<a class="nav flat-box" href="/blog/"
                  
                  
                  id="blog">
									<i class='fas fa-edit fa-fw'></i>&nbsp;博客
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/video/"
                  
                  
                  id="video">
									<i class='fas fa-film fa-fw'></i>&nbsp;视频小站
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/material/"
                  
                  
                  id="material">
									<i class='fas fa-briefcase fa-fw'></i>&nbsp;学习资料
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/diary/"
                  
                  
                  id="diary">
									<i class='fas fa-book fa-fw'></i>&nbsp;随心记
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/categories/"
                  
                    rel="nofollow"
                  
                  
                  id="categories">
									<i class='fas fa-folder-open fa-fw'></i>&nbsp;分类
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/tags/"
                  
                    rel="nofollow"
                  
                  
                  id="tags">
									<i class='fas fa-hashtag fa-fw'></i>&nbsp;标签
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/blog/archives/"
                  
                    rel="nofollow"
                  
                  
                  id="blogarchives">
									<i class='fas fa-archive fa-fw'></i>&nbsp;归档
								</a>
							</li>
      			
      		
				</ul>
			</div>

			
				<div class="m_search">
					<form name="searchform" class="form u-search-form">
						<input type="text" class="input u-search-input" placeholder="搜索" />
						<i class="icon fas fa-search fa-fw"></i>
					</form>
				</div>
			
			<ul class='switcher h-list'>
				
					<li class='s-search'><a class="fas fa-search fa-fw" href='javascript:void(0)'></a></li>
				
				<li class='s-menu'><a class="fas fa-bars fa-fw" href='javascript:void(0)'></a></li>
			</ul>
		</div>

		<div class='nav-sub container container--flex'>
			<a class="logo flat-box"></a>
			<ul class='switcher h-list'>
				<li class='s-comment'><a class="flat-btn fas fa-comments fa-fw" href='javascript:void(0)'></a></li>
        
          <li class='s-toc'><a class="flat-btn fas fa-list fa-fw" href='javascript:void(0)'></a></li>
        
			</ul>
		</div>
	</div>
</header>
	<aside class="menu-phone">
    <header>
		<nav class="menu navgation">
      <ul>
        
          
            <li>
							<a class="nav flat-box" href="/"
                
                
                id="home">
								<i class='fas fa-clock fa-fw'></i>&nbsp;近期文章
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/blog/archives/"
                
                  rel="nofollow"
                
                
                id="blogarchives">
								<i class='fas fa-archive fa-fw'></i>&nbsp;文章归档
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/blog/"
                
                
                id="blog">
								<i class='fas fa-edit fa-fw'></i>&nbsp;我的博客
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/video/"
                
                  rel="nofollow"
                
                
                id="video">
								<i class='fas fa-film fa-fw'></i>&nbsp;我的视频
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/material/"
                
                  rel="nofollow"
                
                
                id="material">
								<i class='fas fa-briefcase fa-fw'></i>&nbsp;学习资料
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/about/"
                
                  rel="nofollow"
                
                
                id="about">
								<i class='fas fa-info-circle fa-fw'></i>&nbsp;关于小站
							</a>
            </li>
          
       
      </ul>
		</nav>
    </header>
	</aside>
<script>setLoadingBarProgress(40);</script>



  <div class="l_body nocover">
    <div class='body-wrapper'>
      <div class='l_main'>
  

  
    <article id="post" class="post white-box article-type-post" itemscope itemprop="blogPost">
      


  <section class='meta'>
    
    
    <div class="meta" id="header-meta">
      
        
  
    <h1 class="title">
      <a href="/2021/04/09/text2viz/">
        Text-to-Viz：根据语言描述自动创建信息图表
      </a>
    </h1>
  


      
      <div class='new-meta-box'>
        
          
        
          
            
  <div class='new-meta-item author'>
    <a href="https://rogerspy.gitee.io" rel="nofollow">
      
        <i class="fas fa-user" aria-hidden="true"></i>
      
      <p>Rogerspy</p>
    </a>
  </div>


          
        
          
            <div class="new-meta-item date">
  <a class='notlink'>
    <i class="fas fa-calendar-alt" aria-hidden="true"></i>
    <p>2021-04-09</p>
  </a>
</div>

          
        
          
            
  
  <div class='new-meta-item category'>
    <a href='/categories/论文解读/' rel="nofollow">
      <i class="fas fa-folder-open" aria-hidden="true"></i>
      <p>论文解读</p>
    </a>
  </div>


          
        
          
            
  
    <div class="new-meta-item browse busuanzi">
      <a class='notlink'>
        <i class="fas fa-eye" aria-hidden="true"></i>
        <p>
          <span id="busuanzi_value_page_pv">
            <i class="fas fa-spinner fa-spin fa-fw" aria-hidden="true"></i>
          </span>
        </p>
      </a>
    </div>
  


          
        
          
            

          
        
          
            
  
    <div style="margin-right: 10px;">
      <span class="post-time">
        <span class="post-meta-item-icon">
          <i class="fa fa-keyboard"></i>
          <span class="post-meta-item-text">  字数统计: </span>
          <span class="post-count">3.9k字</span>
        </span>
      </span>
      &nbsp; | &nbsp;
      <span class="post-time">
        <span class="post-meta-item-icon">
          <i class="fa fa-hourglass-half"></i>
          <span class="post-meta-item-text">  阅读时长≈</span>
          <span class="post-count">13分</span>
        </span>
      </span>
    </div>
  

          
        
      </div>
      
        <hr>
      
    </div>
  </section>


      <section class="article typo">
        <div class="article-entry" itemprop="articleBody">
          <h1 id="1-简介"><a href="#1-简介" class="headerlink" title="1. 简介"></a>1. 简介</h1><p>市面上的专业创建信息图表的工具虽然在努力平衡易用性和功能强大，但是这些工具通常是面向高级用户的，比如设计师、数据科学家等等。对于普通用户非常不友好。</p>
<a id="more"></a>
<p>普通用户通常有以下几个特点：</p>
<ol>
<li>他们偶尔才会创建信息图表，对各种图表工具并不熟悉；</li>
<li>他们的目标不是设计美观、复杂、令人印象深刻的图表，而是需要一个专业、高效、能够准确说明问题的图表；</li>
<li>他们几乎没有设计经验，不知道如何从头开始设计图表。但是，给他们一些好的模板，他们能快速挑选符合心意的图表。</li>
</ol>
<p>为了解决这类用户的需求，我们希望能够从自然语言描述中自动创建图表。为了达成这一目标，我们需要解决两个主要问题：</p>
<ol>
<li>准确理解给定的语句并从中提取适当的信息；</li>
<li>利用提取出的信息创建图表。</li>
</ol>
<p>为了解决以上两个问题，我们使用的技术方案是：</p>
<ul>
<li><p>信息抽取解决方案</p>
<ol>
<li>收集大量的真实用户数据；</li>
<li>对收集到的数据进行人工标注（序列标注）；</li>
<li>利用标注数据训练一个基于 CRF 算法的模型（NER 模型）。</li>
</ol>
</li>
<li><p>图表设计解决方案</p>
<p>利用从互联网上收集到的图表模板，分析其设计空间，提出了一套系统的设计方案。</p>
</li>
</ul>
<p>本文提出的方法使用范围：适用于比例相关的语言描述，比如 “中国 2020 年 GDP 涨幅为 6%。”</p>
<h1 id="2-图表综述"><a href="#2-图表综述" class="headerlink" title="2. 图表综述"></a>2. 图表综述</h1><p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318104323320.png" alt></p>
<p>一个合法图表单元应该具备以下四个特征：</p>
<ul>
<li>至少能传达一条信息；</li>
<li>至少包含一个图形元素；</li>
<li>在视觉和语义上保持完整性和连贯性；</li>
<li>无法被拆分成更小的满足上面三个条件的单元。</li>
</ul>
<p>上图中每个蓝色方框中表示一个图表单元。</p>
<p>根据从互联网上收集到的图表，我们将图表分成四类：</p>
<ul>
<li>基于统计的图表：这是最主要的图表类型，这类图表通常包含，水平/垂直的柱状图、饼状图、甜甜圈图等；</li>
<li>基于时间线的图表：这类图表用来表示事件发展信息，通常包含，时间线、表格等；</li>
<li>基于过程的图表：这类图表用来告诉读者如何一步一步达到特定的目标，这类图表通常用在食谱或者操作手册上；</li>
<li>基于位置的图表：这类图表通常包含一个地图，地图上有一些标志、箭头、图例等信息。</li>
</ul>
<p>在进一步分析基于统计的图表时，我们又将基于统计的图表细分成四个字类：</p>
<ul>
<li><p>比例图表：用于表示某一部分占据总量的比例。通常在文本描述中会包含 “$n\%$”、“$m/n$”、“$m$ 分之 $n$”、“百分之 $m$” 等表述。这类图通常时柱状图、饼状图、甜甜圈图等。</p>
<p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318101045374.png" alt></p>
</li>
<li><p>数量图表：用于表示总量，比如收入、人口、速度等。这类图表通常不会使用饼状图、甜甜圈图，而是使用横向/纵向柱状图、象形图（pictographs chart）等;</p>
<p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318100525489.png" alt></p>
</li>
<li><p>变化图表：虽然变化图表通常可以用比例图标或者数量图表来表示，但是实际上变化图表和之前两种图表并不相同。变化图表的文本描述中通常会包含 “增长”、“下降” 等词汇，而图表通常会有不同的颜色、图形等的一一对比；</p>
<p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318100507951.png" alt></p>
</li>
<li><p>排名图表：这类图表中通常会包含星星、奖牌、奖杯等图像，而文本描述中通常会出现序数词，“第一名”、“前十名”等等。</p>
<p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318100547350.png" alt></p>
</li>
</ul>
<p>对于基于统计的图表，通常一个图表只包含一个信息，但是有些图表在一个单元内包含多个信息。根据包含的不同信息，我们将图表分成四类：</p>
<ul>
<li>单实例图表：这种是最简单的</li>
<li>合成图表：这类图标指的是用多个子图表形成一个完整的图表。比如文字描述 “中国2013年的总人口是14亿，较 2012 年的 13.5 亿增长了 10%。” 这段文字中的粟裕偶数字都是用来描述中国总人口的。</li>
<li>对比图表：多个实例进行对比，通常会使用颜色、图标、尺寸、形状等进行区分；</li>
<li>累积图表：这种图表有点类似于对比图表，但是不同的是，不同的主体会形成一个较大的整体。比如 “中国生产了美国大选所需的所有美国国旗，其中义乌生产了 70%，上海生产了 30%。”</li>
</ul>
<h1 id="3-比例相关的图表"><a href="#3-比例相关的图表" class="headerlink" title="3. 比例相关的图表"></a>3. 比例相关的图表</h1><h2 id="3-1-文字描述"><a href="#3-1-文字描述" class="headerlink" title="3.1 文字描述"></a>3.1 文字描述</h2><ul>
<li>从网上爬取了 10 万 PPT 数据；</li>
<li>利用规则从 10万 PPT 数据中抽取 5562 条描述语句；</li>
<li>主要规则包含： “$n\%$”、“$m/n$”、“$m$ 分之 $n$”、“百分之 $m$” 等。需要注意的是，包含这些关键词的句子并不一定是比例图标，比如 “公司营收增长了 50%。”显然应该属于变化图表；</li>
<li>从 5562 条规则抽取的文本中，经过人工筛选得到 800 条比例图表相关语句；</li>
<li>我们对比了 PPT 里面的语句和文章当中的语句，我们发现PPT里面的句子更加精炼，因此，没有在训练数据中添加文章句子。</li>
</ul>
<h2 id="3-2-图表可视化"><a href="#3-2-图表可视化" class="headerlink" title="3.2 图表可视化"></a>3.2 图表可视化</h2><p>图表可视化设计的四要素：<strong>布局、描述、图形、颜色</strong>。</p>
<ul>
<li><p><strong>布局</strong></p>
<p>图表布局分两种：</p>
<ol>
<li><p>单实例（最常见）。单实例的图表通常包含一个图形和一段描述性的语言。这样的图表通常采用的布局是网格布局，便于图形和描述性文字的对齐。</p>
</li>
<li><p>多实例。将多个实例组合成一个图表通常采用四种策略：</p>
<ul>
<li>并排（side-by-side）。为了表示对比、层级或者其他逻辑关系，多个实例通常采用网格布局，包括平行、并列、循环、层级和堆积等（下图a）。</li>
<li>共享轴（share-axes）。这种布局通常是将多个实例进行对齐，然后放到一个通用的坐标系统下。通常用在带坐标轴的统计图表里，比如条形图、散点图等（下图b）。</li>
<li>共享中心（share-center）。这种布局将多个数字实例以同一个圆心排列成圆形或者扇形。通常用在饼状图、夜莺玫瑰走势图（Nightingale rose charts）等上（下图c）。</li>
<li>共享文本（share-context）。这种布局将图表上不同的区域使用相同的注释加以说明。通常用在注释图表中，将注释放在公共空白区域（下图a）。</li>
</ul>
<p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318100626046.png" alt></p>
</li>
</ol>
</li>
<li><p><strong>文本描述</strong></p>
<p>前面我们对比例图表的定义是，用来表示某一部分占据总数的比例。那么在比例图表的文本描述中就应该包含三个关键信息：<strong>数值、局部、整体</strong>，实际上图表设计师通常会在数值前面加上一个修饰词，比如 “大于”、“小于” 等。除了这四种类型（包括修饰词）的描述，我们还发现了下面一些通用形式的描述：</p>
<ol>
<li>完整描述。</li>
<li>在描述中数字被省略了。比如，“40 percent of USA fresh water is used for agriculture” 中的 “40 percent” 被省略。（ps: 我没有找到合适的中文例子）</li>
<li>局部是一个动词词组。比如，“65% 的咖啡是在早餐中消费掉的”， 其中 “消费掉” 作为局部，是一个动词词组。</li>
<li>数值-整体组合。比如，“65% 的咖啡是在早餐中消费掉的” 中的 “65% 的咖啡” 就是一个数值-整体组合。</li>
<li>文本描述以数值为界被分割开了。比如，“中国只有”，“10%”，“的人有本科学历”（ps: 同样没找到比较合适的中文例子）。</li>
</ol>
</li>
<li><p><strong>图形</strong></p>
<p>图形部分涉及两点：图形的选择和组合。图形设计主要考虑两点：</p>
<ol>
<li>图形应该与原始的文本描述具有语义相关性；</li>
<li>图形的不同元素应该具有不同的作用。（ps: 不同的元素表示相同的信息的话容易造成混淆）</li>
</ol>
<p>根据已有的比例图表，我们将最常使用的图形分成七大类：象形图（下图a）、装饰图（下图d）、圈图（下图c）、饼状图（下图o）、条形图（下图i）、填充图标（下图e）、缩放图标（下图g）。</p>
<p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318104638047.png" alt></p>
</li>
<li><p><strong>颜色</strong></p>
<p>颜色设计的通用规则是：</p>
<ol>
<li>前景和背景颜色：背景颜色占据绝大多数区域；前景颜色更加多样；不同文本框的文本描述使用相同的颜色；图形元素可以使用一种或者多种颜色，视情况而定。比如，象形图、饼状图等至少需要两种颜色，而装饰图标只需要一种颜色。</li>
<li>数字高亮：常见的高亮方法包括尺寸、颜色和字体。</li>
</ol>
</li>
</ul>
<h1 id="4-Text-to-Viz-技术实现方案"><a href="#4-Text-to-Viz-技术实现方案" class="headerlink" title="4. Text-to-Viz 技术实现方案"></a>4. Text-to-Viz 技术实现方案</h1><p>系统包括两个主要模块：文本分析模块和可视化生成器模块。首先用户输入一段文本，然后文本分析模块对文本进行分析，从中抽取 <strong>修饰词、数字、局部、整体</strong> 等信息。然后将原始文本和从文本中抽取出的信息一同输入给可视化生成器模块。可视化生成器模块生成或者选取合适的 <strong>布局、描述、图形、颜色</strong>，然后将这些元素组合成一系列可用的图表。对生成的图表进行评估和打分，根据打分的高低进行排序，呈现给用户，让用户进行选择。</p>
<p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318111739190.png" alt></p>
<h2 id="4-1-文本分析模块"><a href="#4-1-文本分析模块" class="headerlink" title="4.1 文本分析模块"></a>4.1 文本分析模块</h2><p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318112525492.png" alt></p>
<p>预定义四种实体：修饰词（<strong>M</strong>odifier）、数字（<strong>N</strong>umber）、局部（<strong>P</strong>art）、整体（<strong>W</strong>hole）（ps: B-M、I-M、B-N、I-N、B-P、I-P、B-W、I-W、O一共需要九个输出）。利用命名实体识别模型对这四种实体进行识别抽取。本文使用的命名实体识别模型是 CNN+CRF 模型。主要包括一下三步：</p>
<ul>
<li>分词：“中国 GDP 上涨 6%。” -&gt; [”中国“，”GPD“，”上涨“，”6%“，”。“]</li>
<li>特征化：将分词后的结果映射成词向量序列</li>
<li>CNN+CRF：一维 CNN，$kernel_size=(9\times m)$，本文中 $m=59$。</li>
</ul>
<p>训练结果：</p>
<p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318113057290.png" alt></p>
<h2 id="4-2-可视化生成模块"><a href="#4-2-可视化生成模块" class="headerlink" title="4.2 可视化生成模块"></a>4.2 可视化生成模块</h2><p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318114310942.png" alt></p>
<h3 id="4-2-1-布局"><a href="#4-2-1-布局" class="headerlink" title="4.2.1 布局"></a>4.2.1 布局</h3><p>布局设计需要解决两个问题：</p>
<ol>
<li>如何分割区域？</li>
<li>每个区域需要填充什么样的信息？</li>
</ol>
<p>以上图为例，我们可以通过人为设计规则来解决以上两个问题：</p>
<ol>
<li>如果用户的文本描述是以数值开头的，那么我们将区域分成上图 $2\times 1$ 的形式；</li>
<li>区域1 填充象形图、图标、饼状图等；</li>
<li>区域2 填充文本描述中的数字信息；</li>
<li>区域3 填充删除数字信息后的用户输入文本</li>
</ol>
<p>我们通过分析收集到的数据，预先定义了 20 套布局模板作为项目启动数据。然后针对每一套布局模板都制定了相关的规则。</p>
<h3 id="4-2-2-描述"><a href="#4-2-2-描述" class="headerlink" title="4.2.2 描述"></a>4.2.2 描述</h3><p>基本的描述信息通过文本分析模块已经得到了，剩下一些补充描述我们利用 Stanford Parser 对用户文本进行语法分析得到一个语法树。然后根据不同的布局，从语法树中抽取不同的内容。</p>
<h3 id="4-2-3-图形"><a href="#4-2-3-图形" class="headerlink" title="4.2.3 图形"></a>4.2.3 图形</h3><p>在我们的实现中，我们构建了一个图形库，包含 100 个图形，每个图形都人为添加一个或多个关键词用来表示该图形的语义信息。然后将局部和整体的内容进行行分词、删除停用词，然后用 word2vec 进行词义匹配，找个最合适图形。</p>
<h3 id="4-2-4-颜色"><a href="#4-2-4-颜色" class="headerlink" title="4.2.4 颜色"></a>4.2.4 颜色</h3><p>颜色生成考虑两方面：</p>
<ol>
<li>所有选用的颜色组合起来应该是协调的；</li>
<li>如果搭配的颜色与文本描述的内容相搭就更好了，比如文本描述保护环境，我们选择绿色和蓝色。</li>
</ol>
<p>在我们的颜色生成模块中，同样是人为构建了一套颜色系统，给每个颜色系统打上标签，包括前景、背景、高亮等。颜色系统设计可参考 <a href="https://color.adobe.com" target="_blank" rel="noopener">Adobe 颜色</a> 和 <a href="https://coolors.co/browser" target="_blank" rel="noopener">Coolors</a>。然后根据标签设计规则，只当每种颜色系统的使用条件。</p>
<h3 id="4-2-5-合成"><a href="#4-2-5-合成" class="headerlink" title="4.2.5 合成"></a>4.2.5 合成</h3><p>遍历所有生成的布局、描述、图形、颜色，将这四元素组合。比如，可视化生成模块生成结果如下：</p>
<ul>
<li>布局 = <code>[layout1, layout2]</code></li>
<li>描述 = <code>[description1, description2, description3]</code></li>
<li>图形 = <code>[graphic1, graphic2]</code></li>
<li>颜色 = <code>[color1]</code></li>
</ul>
<p>将上面的元素组合起来得到一个候选集：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">候选集 = [</span><br><span class="line">    [layout1, description1, graphic1, color1],</span><br><span class="line">    [layout1, description1, graphic2, color1],</span><br><span class="line">    [layout1, description2, graphic1, color1],</span><br><span class="line">    [layout1, description2, graphic2, color1],</span><br><span class="line">    [layout1, description3, graphic1, color1],</span><br><span class="line">    [layout1, description3, graphic2, color1],</span><br><span class="line">    [layout2, description1, graphic1, color1],</span><br><span class="line">    [layout2, description1, graphic1, color1],</span><br><span class="line">    [layout2, description1, graphic2, color1],</span><br><span class="line">    [layout2, description2, graphic1, color1],</span><br><span class="line">    [layout2, description2, graphic2, color1],</span><br><span class="line">    [layout2, description3, graphic1, color1],</span><br><span class="line">    [layout2, description3, graphic2, color1]</span><br><span class="line">]</span><br></pre></td></tr></table></figure>
<p>得到候选集以后根据以下规则进一步处理：</p>
<ol>
<li>用户的输入文本不满足布局模板所需要的元素。比如，某个布局模板需要修饰词（比如 ”大于“），但是在用户文本中没有出现修饰词，那么我们就将这个布局模板的组合删掉。比如将候选集中所有包含 layout1 的组合删掉。</li>
<li>抽出描述和图形，计算他们的横纵比，将他们缩放到一个合适的尺寸，放到布局模板中。这个问题可以通过 <a href="https://constraints.cs.washington.edu/solvers/cassowary-tochi.pdf" target="_blank" rel="noopener">Badros</a> 等人提出的方法去解决。</li>
<li>挑选合适的字体，然后将所有元素进行对齐。</li>
</ol>
<h3 id="4-2-6-重排"><a href="#4-2-6-重排" class="headerlink" title="4.2.6 重排"></a>4.2.6 重排</h3><p>综合考虑三种评分机制：语义得分、可视化得分和信息得分。</p>
<ul>
<li><p>语义得分：由于图形和颜色的选取是通过标签语义匹配得到的，因此，得分越高说明匹配度越高。word2vec 计算词义距离 $\alpha_s \in [0,1]$，0 分说明语义和图形或者颜色毫无关系，1 分说明非常契合。</p>
</li>
<li><p>可视化得分：由于图形和描述的尺寸与布局不一定相称，所以可视化得分也是我们考虑的因素之一。我们通过计算可视化元素中空白区域的占比来衡量可视化得分：</p>
<script type="math/tex; mode=display">
\alpha_v = \frac{所有非空白区域面积}{画布区域总面积}</script></li>
<li><p>信息得分：通过信息得分来衡量图表是否包含了用户描述的所有信息。定义如下：</p>
<script type="math/tex; mode=display">
\alpha_i = \sum_{w\in S} \frac{I(w)}{|S|}</script><p>其中 $S$ 表示用户描述文本中的所有非停用词，$I(w)$ 的定义如下：</p>
<script type="math/tex; mode=display">
I(w) = \begin{cases}
1 & 如果 w 作为图标或者词出现在了生成的图表中 \\
0 & 不满足上面的条件
\end{cases}</script></li>
</ul>
<p>有了上面三种评分方式，候选集中每种组合方式最后的总得分为：</p>
<script type="math/tex; mode=display">
\alpha = w_s\alpha_s + w_v\alpha_v+w_i\alpha_i</script><p>默认情况下，令 $w_s=0.25,w_v=0.5, w_i=0.25$。</p>
<p>最后我们根据每种组合最后的得分对候选集中的图表进行重排，然后推荐给用户。</p>
<p>需要注意的是，我们要支持用户对图表进行编辑，改变布局、描述、图形、颜色等。</p>
<h1 id="5-Text-to-Viz-实际效果"><a href="#5-Text-to-Viz-实际效果" class="headerlink" title="5. Text-to-Viz 实际效果"></a>5. Text-to-Viz 实际效果</h1><p><img src="https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/20210318162444126.png" alt></p>

        </div>
        
          


  <section class='meta' id="footer-meta">
    <hr>
    <div class='new-meta-box'>
      
        
          <div class="new-meta-item date" itemprop="dateUpdated" datetime="2021-08-23T01:05:27+08:00">
  <a class='notlink'>
    <i class="fas fa-clock" aria-hidden="true"></i>
    <p>最后更新于 2021年8月23日</p>
  </a>
</div>

        
      
        
          
  
  <div class="new-meta-item meta-tags"><a class="tag" href="/tags/text2viz/" rel="nofollow"><i class="fas fa-hashtag" aria-hidden="true"></i>&nbsp;<p>text2viz</p></a></div> <div class="new-meta-item meta-tags"><a class="tag" href="/tags/nl2infographic/" rel="nofollow"><i class="fas fa-hashtag" aria-hidden="true"></i>&nbsp;<p>nl2infographic</p></a></div>


        
      
        
          
  <div class="new-meta-item share -mob-share-list">
  <div class="-mob-share-list share-body">
    
      
        <a class="-mob-share-qq" title="QQ好友" rel="external nofollow noopener noreferrer"
          
          href="http://connect.qq.com/widget/shareqq/index.html?url=https://rogerspy.gitee.io/2021/04/09/text2viz/&title=Text-to-Viz：根据语言描述自动创建信息图表 | Rogerspy's Home&summary=1. 简介市面上的专业创建信息图表的工具虽然在努力平衡易用性和功能强大，但是这些工具通常是面向高级用户的，比如设计师、数据科学家等等。对于普通用户非常不友好。"
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/qq.png">
          
        </a>
      
    
      
        <a class="-mob-share-qzone" title="QQ空间" rel="external nofollow noopener noreferrer"
          
          href="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=https://rogerspy.gitee.io/2021/04/09/text2viz/&title=Text-to-Viz：根据语言描述自动创建信息图表 | Rogerspy's Home&summary=1. 简介市面上的专业创建信息图表的工具虽然在努力平衡易用性和功能强大，但是这些工具通常是面向高级用户的，比如设计师、数据科学家等等。对于普通用户非常不友好。"
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/qzone.png">
          
        </a>
      
    
      
        <a class='qrcode' rel="external nofollow noopener noreferrer" href=''>
        
          <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/wechat.png">
        
        </a>
      
    
      
        <a class="-mob-share-weibo" title="微博" rel="external nofollow noopener noreferrer"
          
          href="http://service.weibo.com/share/share.php?url=https://rogerspy.gitee.io/2021/04/09/text2viz/&title=Text-to-Viz：根据语言描述自动创建信息图表 | Rogerspy's Home&summary=1. 简介市面上的专业创建信息图表的工具虽然在努力平衡易用性和功能强大，但是这些工具通常是面向高级用户的，比如设计师、数据科学家等等。对于普通用户非常不友好。"
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/weibo.png">
          
        </a>
      
    
  </div>
</div>



        
      
    </div>
  </section>


        
        
            <div class="prev-next">
                
                    <section class="prev">
                        <span class="art-item-left">
                            <h6><i class="fas fa-chevron-left" aria-hidden="true"></i>&nbsp;上一页</h6>
                            <h4>
                                <a href="/2021/04/11/neural-language-model-cnn/" rel="prev" title="预训练语言模型-神经网络语言模型：CNNLM">
                                  
                                      预训练语言模型-神经网络语言模型：CNNLM
                                  
                                </a>
                            </h4>
                            
                                
                                <h6 class="tags">
                                    <a class="tag" href="/tags/language-model/"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i>Language Model</a> <a class="tag" href="/tags/cnnlm/"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i>CNNLM</a>
                                </h6>
                            
                        </span>
                    </section>
                
                
                    <section class="next">
                        <span class="art-item-right" aria-hidden="true">
                            <h6>下一页&nbsp;<i class="fas fa-chevron-right" aria-hidden="true"></i></h6>
                            <h4>
                                <a href="/2021/04/06/Implicit_Regularization/" rel="prev" title="随机梯度下降中隐式正则化的起源">
                                    
                                        随机梯度下降中隐式正则化的起源
                                    
                                </a>
                            </h4>
                            
                                
                                <h6 class="tags">
                                    <a class="tag" href="/tags/nlp/"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i>NLP</a> <a class="tag" href="/tags/隐式正则化/"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i>隐式正则化</a>
                                </h6>
                            
                        </span>
                    </section>
                
            </div>
        
      </section>
    </article>
  

  
    <!-- 显示推荐文章和评论 -->



  <article class="post white-box comments">
    <section class="article typo">
      <h4><i class="fas fa-comments fa-fw" aria-hidden="true"></i>&nbsp;评论</h4>
      
      
      
        <section id="comments">
          <div id="gitalk-container"></div>
        </section>
      
      
    </section>
  </article>


  




<!-- 根据页面mathjax变量决定是否加载MathJax数学公式js -->

  <!-- MathJax配置，可通过单美元符号书写行内公式等 -->
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    "HTML-CSS": {
      preferredFont: "TeX",
      availableFonts: ["STIX","TeX"],
      linebreaks: { automatic:true },
      EqnChunk: (MathJax.Hub.Browser.isMobile ? 10 : 50)
    },
    tex2jax: {
      inlineMath: [ ["$", "$"], ["\\(","\\)"] ],
      processEscapes: true,
      ignoreClass: "tex2jax_ignore|dno",
      skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
    },
    TeX: {
      equationNumbers: { autoNumber: "AMS" },
      noUndefined: { attributes: { mathcolor: "red", mathbackground: "#FFEEEE", mathsize: "90%" } },
      Macros: { href: "{}" }
    },
    messageStyle: "none"
  });
</script>
<!-- 给MathJax元素添加has-jax class -->
<script type="text/x-mathjax-config">
  MathJax.Hub.Queue(function() {
    var all = MathJax.Hub.getAllJax(), i;
    for(i=0; i < all.length; i += 1) {
      all[i].SourceElement().parentNode.className += (all[i].SourceElement().parentNode.className ? ' ' : '') + 'has-jax';
    }
  });
</script>
<!-- 通过连接CDN加载MathJax的js代码 -->
<script type="text/javascript" async
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
</script>




  <script>
    window.subData = {
      title: 'Text-to-Viz：根据语言描述自动创建信息图表',
      tools: true
    }
  </script>


</div>
<aside class='l_side'>
  
    
    
      
        
          
          
            <section class='widget shake author'>
  <div class='content pure'>
    
      <div class='avatar'>
        <img class='avatar' src='https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/65-1Z31313530JC.jpeg'/>
      </div>
    
    
    
      <div class="social-wrapper">
        
          
            <a href="/atom.xml"
              class="social fas fa-rss flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="mailto:rogerspy@163.com"
              class="social fas fa-envelope flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="https://github.com/rogerspy"
              class="social fab fa-github flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="https://music.163.com/#/user/home?id=1960721923"
              class="social fas fa-headphones-alt flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
      </div>
    
  </div>
</section>

          
        
      
        
          
          
            
  <section class='widget toc-wrapper'>
    
<header class='pure'>
  <div><i class="fas fa-list fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;本文目录</div>
  
    <div class='wrapper'><a class="s-toc rightBtn" rel="external nofollow noopener noreferrer" href="javascript:void(0)"><i class="fas fa-thumbtack fa-fw"></i></a></div>
  
</header>

    <div class='content pure'>
      <ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#1-简介"><span class="toc-text">1. 简介</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#2-图表综述"><span class="toc-text">2. 图表综述</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#3-比例相关的图表"><span class="toc-text">3. 比例相关的图表</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#3-1-文字描述"><span class="toc-text">3.1 文字描述</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#3-2-图表可视化"><span class="toc-text">3.2 图表可视化</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#4-Text-to-Viz-技术实现方案"><span class="toc-text">4. Text-to-Viz 技术实现方案</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#4-1-文本分析模块"><span class="toc-text">4.1 文本分析模块</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#4-2-可视化生成模块"><span class="toc-text">4.2 可视化生成模块</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#4-2-1-布局"><span class="toc-text">4.2.1 布局</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-2-2-描述"><span class="toc-text">4.2.2 描述</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-2-3-图形"><span class="toc-text">4.2.3 图形</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-2-4-颜色"><span class="toc-text">4.2.4 颜色</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-2-5-合成"><span class="toc-text">4.2.5 合成</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-2-6-重排"><span class="toc-text">4.2.6 重排</span></a></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#5-Text-to-Viz-实际效果"><span class="toc-text">5. Text-to-Viz 实际效果</span></a></li></ol>
    </div>
  </section>


          
        
      
        
          
          
            <section class='widget grid'>
  
<header class='pure'>
  <div><i class="fas fa-map-signs fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;站内导航</div>
  
</header>

  <div class='content pure'>
    <ul class="grid navgation">
      
        <li><a class="flat-box" " href="/"
          
          
          id="home">
          
            <i class="fas fa-clock fa-fw" aria-hidden="true"></i>
          
          近期文章
        </a></li>
      
        <li><a class="flat-box" " href="/blog/"
          
          
          id="blog">
          
            <i class="fas fa-edit fa-fw" aria-hidden="true"></i>
          
          我的博客
        </a></li>
      
        <li><a class="flat-box" " href="/paper_note/"
          
          
          id="paper_note">
          
            <i class="fas fa-book fa-fw" aria-hidden="true"></i>
          
          论文笔记
        </a></li>
      
        <li><a class="flat-box" " href="/algorithm/"
          
          
          id="algorithm">
          
            <i class="fas fa-cube fa-fw" aria-hidden="true"></i>
          
          算法基础
        </a></li>
      
        <li><a class="flat-box" " href="/leetcode/"
          
          
          id="leetcode">
          
            <i class="fas fa-code fa-fw" aria-hidden="true"></i>
          
          Leetcode
        </a></li>
      
        <li><a class="flat-box" " href="/video/"
          
          
          id="video">
          
            <i class="fas fa-film fa-fw" aria-hidden="true"></i>
          
          视频小站
        </a></li>
      
        <li><a class="flat-box" " href="/material/"
          
          
          id="material">
          
            <i class="fas fa-briefcase fa-fw" aria-hidden="true"></i>
          
          学习资料
        </a></li>
      
        <li><a class="flat-box" " href="/dataset/"
          
          
          id="dataset">
          
            <i class="fas fa-database fa-fw" aria-hidden="true"></i>
          
          数据集
        </a></li>
      
        <li><a class="flat-box" " href="/articles/"
          
          
          id="articles">
          
            <i class="fas fa-sticky-note fa-fw" aria-hidden="true"></i>
          
          杂文天地
        </a></li>
      
        <li><a class="flat-box" " href="/blog/archives/"
          
            rel="nofollow"
          
          
          id="blogarchives">
          
            <i class="fas fa-archive fa-fw" aria-hidden="true"></i>
          
          文章归档
        </a></li>
      
        <li><a class="flat-box" " href="/personal_center/"
          
          
          id="personal_center">
          
            <i class="fas fa-university fa-fw" aria-hidden="true"></i>
          
          个人中心
        </a></li>
      
        <li><a class="flat-box" " href="/about/"
          
            rel="nofollow"
          
          
          id="about">
          
            <i class="fas fa-info-circle fa-fw" aria-hidden="true"></i>
          
          关于小站
        </a></li>
      
    </ul>
  </div>
</section>

          
        
      
        
          
          
            <section class='widget list'>
  
<header class='pure'>
  <div><i class="fas fa-terminal fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;机器学习框架</div>
  
</header>

  <div class='content pure'>
    <ul class="entry">
      
        <li><a class="flat-box" title="https://rogerspy.gitee.io/pytorch-zh/" href="https://rogerspy.gitee.io/pytorch-zh/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-star fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;PyTorch 中文文档
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://keras-zh.readthedocs.io/" href="https://keras-zh.readthedocs.io/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-star fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Keras 中文文档
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://tensorflow.google.cn/" href="https://tensorflow.google.cn/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-star fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Tensorflow 中文文档
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="http://scikitlearn.com.cn/" href="http://scikitlearn.com.cn/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-star fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Scikit Learn 中文文档
          </div>
          
        </a></li>
      
    </ul>
  </div>
</section>

          
        
      
        
          
          
            <section class='widget list'>
  
<header class='pure'>
  <div><i class="fas fa-wrench fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;百宝箱</div>
  
</header>

  <div class='content pure'>
    <ul class="entry">
      
        <li><a class="flat-box" title="https://rogerspy.github.io/excalidraw-claymate/" href="https://rogerspy.github.io/excalidraw-claymate/"
          
          
            target="_blank"
          
          >
          <div class='name'>
            
              <i class="fas fa-magic fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Excalidraw-Claymate
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://rogerspy.github.io/jupyterlite/" href="https://rogerspy.github.io/jupyterlite/"
          
          
            target="_blank"
          
          >
          <div class='name'>
            
              <i class="fas fa-terminal fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;JupyterLite
          </div>
          
        </a></li>
      
    </ul>
  </div>
</section>

          
        
      
        
          
          
            <section class='widget list'>
  
<header class='pure'>
  <div><i class="fas fa-eye fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;睁眼看世界</div>
  
</header>

  <div class='content pure'>
    <ul class="entry">
      
        <li><a class="flat-box" title="https://deeplearn.org/" href="https://deeplearn.org/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-link fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Deep Learning Monitor
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://paperswithcode.com/sota" href="https://paperswithcode.com/sota"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-link fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Browse State-of-the-Art
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://huggingface.co/transformers/" href="https://huggingface.co/transformers/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-link fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Transformers
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://huggingface.co/models" href="https://huggingface.co/models"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-link fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Transformers-models
          </div>
          
        </a></li>
      
    </ul>
  </div>
</section>

          
        
      
        
          
          
            
  <section class='widget category'>
    
<header class='pure'>
  <div><i class="fas fa-folder-open fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;文章分类</div>
  
    <a class="rightBtn"
    
      rel="nofollow"
    
    
    href="/categories/"
    title="categories/">
    <i class="fas fa-expand-arrows-alt fa-fw"></i></a>
  
</header>

    <div class='content pure'>
      <ul class="entry">
        
          <li><a class="flat-box" title="/categories/nl2sql/" href="/categories/nl2sql/"><div class='name'>NL2SQL</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/categories/nlp/" href="/categories/nlp/"><div class='name'>NLP</div><div class='badge'>(23)</div></a></li>
        
          <li><a class="flat-box" title="/categories/博客转载/" href="/categories/博客转载/"><div class='name'>博客转载</div><div class='badge'>(5)</div></a></li>
        
          <li><a class="flat-box" title="/categories/数据结构与算法/" href="/categories/数据结构与算法/"><div class='name'>数据结构与算法</div><div class='badge'>(11)</div></a></li>
        
          <li><a class="flat-box" title="/categories/知识图谱/" href="/categories/知识图谱/"><div class='name'>知识图谱</div><div class='badge'>(3)</div></a></li>
        
          <li><a class="flat-box" title="/categories/论文解读/" href="/categories/论文解读/"><div class='name'>论文解读</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box" title="/categories/语言模型/" href="/categories/语言模型/"><div class='name'>语言模型</div><div class='badge'>(10)</div></a></li>
        
      </ul>
    </div>
  </section>


          
        
      
        
          
          
            
  <section class='widget tagcloud'>
    
<header class='pure'>
  <div><i class="fas fa-fire fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;热门标签</div>
  
    <a class="rightBtn"
    
      rel="nofollow"
    
    
    href="/tags/"
    title="tags/">
    <i class="fas fa-expand-arrows-alt fa-fw"></i></a>
  
</header>

    <div class='content pure'>
      <a href="/tags/attention/" style="font-size: 16.86px; color: #868686">Attention</a> <a href="/tags/cnnlm/" style="font-size: 14px; color: #999">CNNLM</a> <a href="/tags/data-structure/" style="font-size: 14px; color: #999">Data Structure</a> <a href="/tags/deep/" style="font-size: 14px; color: #999">Deep</a> <a href="/tags/ffnnlm/" style="font-size: 14px; color: #999">FFNNLM</a> <a href="/tags/gaussian/" style="font-size: 14px; color: #999">Gaussian</a> <a href="/tags/initialization/" style="font-size: 14px; color: #999">Initialization</a> <a href="/tags/kg/" style="font-size: 16.86px; color: #868686">KG</a> <a href="/tags/lstm/" style="font-size: 14px; color: #999">LSTM</a> <a href="/tags/lstmlm/" style="font-size: 14px; color: #999">LSTMLM</a> <a href="/tags/language-model/" style="font-size: 16.86px; color: #868686">Language Model</a> <a href="/tags/log-linear-language-model/" style="font-size: 14px; color: #999">Log-Linear Language Model</a> <a href="/tags/nlp/" style="font-size: 19.71px; color: #727272">NLP</a> <a href="/tags/nmt/" style="font-size: 22.57px; color: #5f5f5f">NMT</a> <a href="/tags/norm/" style="font-size: 14px; color: #999">Norm</a> <a href="/tags/probabilistic-language-model/" style="font-size: 14px; color: #999">Probabilistic Language Model</a> <a href="/tags/rnnlm/" style="font-size: 14px; color: #999">RNNLM</a> <a href="/tags/roc-auc/" style="font-size: 14px; color: #999">ROC-AUC</a> <a href="/tags/transformer/" style="font-size: 24px; color: #555">Transformer</a> <a href="/tags/context2vec/" style="font-size: 14px; color: #999">context2vec</a> <a href="/tags/divide-conquer/" style="font-size: 14px; color: #999">divide-conquer</a> <a href="/tags/insertion/" style="font-size: 16.86px; color: #868686">insertion</a> <a href="/tags/insertion-deletion/" style="font-size: 15.43px; color: #8f8f8f">insertion-deletion</a> <a href="/tags/knowledge-modelling/" style="font-size: 15.43px; color: #8f8f8f">knowledge-modelling</a> <a href="/tags/nl2infographic/" style="font-size: 14px; color: #999">nl2infographic</a> <a href="/tags/nl2sql/" style="font-size: 14px; color: #999">nl2sql</a> <a href="/tags/ontology/" style="font-size: 14px; color: #999">ontology</a> <a href="/tags/parallel-recurrent/" style="font-size: 14px; color: #999">parallel-recurrent</a> <a href="/tags/pytorch/" style="font-size: 14px; color: #999">pytorch</a> <a href="/tags/queue/" style="font-size: 18.29px; color: #7c7c7c">queue</a> <a href="/tags/sparse/" style="font-size: 14px; color: #999">sparse</a> <a href="/tags/stack/" style="font-size: 14px; color: #999">stack</a> <a href="/tags/tensorflow/" style="font-size: 14px; color: #999">tensorflow</a> <a href="/tags/text2viz/" style="font-size: 14px; color: #999">text2viz</a> <a href="/tags/weighted-head/" style="font-size: 14px; color: #999">weighted-head</a> <a href="/tags/半监督语言模型/" style="font-size: 14px; color: #999">半监督语言模型</a> <a href="/tags/双数组前缀树/" style="font-size: 14px; color: #999">双数组前缀树</a> <a href="/tags/推荐系统/" style="font-size: 14px; color: #999">推荐系统</a> <a href="/tags/数据结构/" style="font-size: 21.14px; color: #686868">数据结构</a> <a href="/tags/数组/" style="font-size: 14px; color: #999">数组</a> <a href="/tags/时间复杂度/" style="font-size: 14px; color: #999">时间复杂度</a> <a href="/tags/算法/" style="font-size: 14px; color: #999">算法</a> <a href="/tags/评估方法/" style="font-size: 14px; color: #999">评估方法</a> <a href="/tags/词向量/" style="font-size: 14px; color: #999">词向量</a> <a href="/tags/隐式正则化/" style="font-size: 14px; color: #999">隐式正则化</a>
    </div>
  </section>


          
        
      
        
          
          
            


  <section class='widget music'>
    
<header class='pure'>
  <div><i class="fas fa-compact-disc fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;最近在听</div>
  
    <a class="rightBtn"
    
      rel="external nofollow noopener noreferrer"
    
    
      target="_blank"
    
    href="https://music.163.com/#/user/home?id=1960721923"
    title="https://music.163.com/#/user/home?id=1960721923">
    <i class="far fa-heart fa-fw"></i></a>
  
</header>

    <div class='content pure'>
      
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer@1.7.0/dist/APlayer.min.css">
  <div class="aplayer"
    data-theme="#1BCDFC"
    
    
    data-mode="circulation"
    data-server="netease"
    data-type="playlist"
    data-id="2957571193"
    data-volume="0.7">
  </div>
  <script src="https://cdn.jsdelivr.net/npm/aplayer@1.7.0/dist/APlayer.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/meting@1.1.0/dist/Meting.min.js"></script>


    </div>
  </section>


          
        
      
    

  
</aside>

<footer id="footer" class="clearfix">
  <div id="sitetime"></div>
  
  
    <div class="social-wrapper">
      
        
          <a href="/atom.xml"
            class="social fas fa-rss flat-btn"
            target="_blank"
            rel="external nofollow noopener noreferrer">
          </a>
        
      
        
          <a href="mailto:rogerspy@163.com"
            class="social fas fa-envelope flat-btn"
            target="_blank"
            rel="external nofollow noopener noreferrer">
          </a>
        
      
        
          <a href="https://github.com/rogerspy"
            class="social fab fa-github flat-btn"
            target="_blank"
            rel="external nofollow noopener noreferrer">
          </a>
        
      
        
          <a href="https://music.163.com/#/user/home?id=1960721923"
            class="social fas fa-headphones-alt flat-btn"
            target="_blank"
            rel="external nofollow noopener noreferrer">
          </a>
        
      
    </div>
  
  <br>
  <div><p>博客内容遵循 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议</a></p>
</div>
  <div>
    本站使用
    <a href="https://xaoxuu.com/wiki/material-x/" target="_blank" class="codename">Material X</a>
    作为主题
    
      ，
      总访问量为
      <span id="busuanzi_value_site_pv"><i class="fas fa-spinner fa-spin fa-fw" aria-hidden="true"></i></span>
      次
    
    。
  </div>
	</footer>

<script>setLoadingBarProgress(80);</script>
<!-- 点击特效，输入特效 运行时间 -->
<script type="text/javascript" src="/cool/cooltext.js"></script>
<script type="text/javascript" src="/cool/clicklove.js"></script>
<script type="text/javascript" src="/cool/sitetime.js"></script>



      <script>setLoadingBarProgress(60);</script>
    </div>
    <a class="s-top fas fa-arrow-up fa-fw" href='javascript:void(0)'></a>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>

  <script>
    var GOOGLE_CUSTOM_SEARCH_API_KEY = "";
    var GOOGLE_CUSTOM_SEARCH_ENGINE_ID = "";
    var ALGOLIA_API_KEY = "";
    var ALGOLIA_APP_ID = "";
    var ALGOLIA_INDEX_NAME = "";
    var AZURE_SERVICE_NAME = "";
    var AZURE_INDEX_NAME = "";
    var AZURE_QUERY_KEY = "";
    var BAIDU_API_ID = "";
    var SEARCH_SERVICE = "hexo" || "hexo";
    var ROOT = "/"||"/";
    if(!ROOT.endsWith('/'))ROOT += '/';
  </script>

<script src="//instant.page/1.2.2" type="module" integrity="sha384-2xV8M5griQmzyiY3CDqh1dn4z3llDVqZDqzjzcY+jCBCk/a5fXJmuZ/40JJAPeoU"></script>


  <script async src="https://cdn.jsdelivr.net/npm/scrollreveal@4.0.5/dist/scrollreveal.min.js"></script>
  <script type="text/javascript">
    $(function() {
      const $reveal = $('.reveal');
      if ($reveal.length === 0) return;
      const sr = ScrollReveal({ distance: 0 });
      sr.reveal('.reveal');
    });
  </script>


  <script src="https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.js"></script>
  <script type="text/javascript">
    $(function() {
      Waves.attach('.flat-btn', ['waves-button']);
      Waves.attach('.float-btn', ['waves-button', 'waves-float']);
      Waves.attach('.float-btn-light', ['waves-button', 'waves-float', 'waves-light']);
      Waves.attach('.flat-box', ['waves-block']);
      Waves.attach('.float-box', ['waves-block', 'waves-float']);
      Waves.attach('.waves-image');
      Waves.init();
    });
  </script>


  <script async src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-busuanzi@2.3/js/busuanzi.pure.mini.js"></script>




  
  
  
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-backstretch/2.0.4/jquery.backstretch.min.js"></script>
    <script type="text/javascript">
      $(function(){
        if ('.cover') {
          $('.cover').backstretch(
          ["https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/a0c9e6f9efad8b731cb7376504bd10d79d2053.jpg"],
          {
            duration: "6000",
            fade: "2500"
          });
        } else {
          $.backstretch(
          ["https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/a0c9e6f9efad8b731cb7376504bd10d79d2053.jpg"],
          {
            duration: "6000",
            fade: "2500"
          });
        }
      });
    </script>
  







  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css">
  <script src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js"></script>
  <script type="text/javascript">
    var gitalk = new Gitalk({
      clientID: "35a5e4dc744cc7d162af",
      clientSecret: "7b5a409e17ce0c1971f284eac9f8902eb4b8feba",
      repo: "rogerspy.github.io",
      owner: "Rogerspy",
      admin: "Rogerspy",
      
        id: "/wiki/material-x/",
      
      distractionFreeMode: false  // Facebook-like distraction free mode
    });
    gitalk.render('gitalk-container');
  </script>





  <script src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-material-x@19.5/js/app.js"></script>


  <script src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-material-x@19.5/js/search.js"></script>




<!-- 复制 -->
<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<script>
  let COPY_SUCCESS = "复制成功";
  let COPY_FAILURE = "复制失败";
  /*页面载入完成后，创建复制按钮*/
  !function (e, t, a) {
    /* code */
    var initCopyCode = function(){
      var copyHtml = '';
      copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
      copyHtml += '  <i class="fa fa-copy"></i><span>复制</span>';
      copyHtml += '</button>';
      $(".highlight .code pre").before(copyHtml);
      var clipboard = new ClipboardJS('.btn-copy', {
        target: function(trigger) {
          return trigger.nextElementSibling;
        }
      });

      clipboard.on('success', function(e) {
        //您可以加入成功提示
        console.info('Action:', e.action);
        console.info('Text:', e.text);
        console.info('Trigger:', e.trigger);
        success_prompt(COPY_SUCCESS);
        e.clearSelection();
      });
      clipboard.on('error', function(e) {
        //您可以加入失败提示
        console.error('Action:', e.action);
        console.error('Trigger:', e.trigger);
        fail_prompt(COPY_FAILURE);
      });
    }
    initCopyCode();

  }(window, document);

  /**
   * 弹出式提示框，默认1.5秒自动消失
   * @param message 提示信息
   * @param style 提示样式，有alert-success、alert-danger、alert-warning、alert-info
   * @param time 消失时间
   */
  var prompt = function (message, style, time)
  {
      style = (style === undefined) ? 'alert-success' : style;
      time = (time === undefined) ? 1500 : time*1000;
      $('<div>')
          .appendTo('body')
          .addClass('alert ' + style)
          .html(message)
          .show()
          .delay(time)
          .fadeOut();
  };

  // 成功提示
  var success_prompt = function(message, time)
  {
      prompt(message, 'alert-success', time);
  };

  // 失败提示
  var fail_prompt = function(message, time)
  {
      prompt(message, 'alert-danger', time);
  };

  // 提醒
  var warning_prompt = function(message, time)
  {
      prompt(message, 'alert-warning', time);
  };

  // 信息提示
  var info_prompt = function(message, time)
  {
      prompt(message, 'alert-info', time);
  };

</script>


<!-- fancybox -->
<script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>
<script>
  let LAZY_LOAD_IMAGE = "";
  $(".article-entry").find("fancybox").find("img").each(function () {
      var element = document.createElement("a");
      $(element).attr("data-fancybox", "gallery");
      $(element).attr("href", $(this).attr("src"));
      /* 图片采用懒加载处理时,
       * 一般图片标签内会有个属性名来存放图片的真实地址，比如 data-original,
       * 那么此处将原本的属性名src替换为对应属性名data-original,
       * 修改如下
       */
       if (LAZY_LOAD_IMAGE) {
         $(element).attr("href", $(this).attr("data-original"));
       }
      $(this).wrap(element);
  });
</script>





  <script>setLoadingBarProgress(100);</script>
</body>
</html>
